.

iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0

一般來說,每個應用程式都是獨立的個體,平常不會互相影響,避免有心懷不軌的的應用程式搞破壞,但有些時候我們會需要在不同的應用程式之間共享資料,像是 Android 就有提供鬧鐘設定、行事曆、聯絡人資料等,這個時候 Content Provider 就派上用場了。

Content Provider

Content Provider 可以幫助我們管理與其他應用程式的存取,並提供共享資料的方法,它是透過定義統一的訪問接口來完成,像是使用 CURD 如新增(insert)、刪除(delete)、修改(update)、查詢(query)這種操作,而且會對資料進行封裝,提供定義資料安全的機制,所以可以不用擔心開放資料存取權限而產生的資安問題。
https://ithelp.ithome.com.tw/upload/images/20220914/20151953p0Y4idWZc7.png

URI

我們如果想要訪問其他應用程式的 Content Provider 的話,會透過 URI 的機制,URI(統一資源標識符) 是用於標識某一網際網路資源名稱的字串,該種標識允許使用者對網路中的資源通過特定的協定進行互動操作,我們把資料用 URI 的型態來標示,這樣其他的應用程式就可以用同一套標準的 URI 規範來處理資料,以 Android 系統來說,URI 大概會分三個區塊:scheme、authonity 與 path。
https://ithelp.ithome.com.tw/upload/images/20220914/20151953Pobe9M6KXy.png

  • content:固定前綴
  • authonity:用來識別是哪個 Content Provider
  • path:Content Provider 中的資料表名
  • id:path 後面可能會加上 /id,通常用來標示資料表的某些資料,比較常對應 id 列

Content Provider 存取流程

如果需要提供 Content Provider 中的資料,我們可以使用 Context 中的 ContentResolver 來操作,ContentResolver可以分析 URI 中的 authority,並且將請求發送到 authority 的 Content Provider ,Content Provider 會再去分析 URI 後段如 path 的部分。
其中的 CursorLoader 是 AsyncTaskLoader 的子類,用於異步加載 ContentProvider 的數據。該類會查詢 ContentResolver 並返回 Cursor。

https://ithelp.ithome.com.tw/upload/images/20220914/2015195377jkeAHG0m.png

面試可能會遇到的相關問題

  • 什麼是 Content Provider?
  • 如何實作 Content Provider?

參考資料

Content provider basics - Android Developers
URI - wiki
Loaders


上一篇
第七天:Android 四大元件之 BroadcastReceiver
下一篇
第九天:Android Architecture Components 介紹
系列文
轉職成 Android Developer 的最後一哩路30
.
圖片
  直播研討會

尚未有邦友留言

立即登入留言